package org.cybzacg.convert.annotation;


import org.cybzacg.convert.enums.ConversionPriority;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 转换器注解
 * 用于标记类型转换器类，支持自动注册
 *
 * <p>使用此注解标记的转换器类可以通过包扫描自动注册到转换器工厂中。
 *
 * <p>示例用法：
 * <pre>{@code
 * &#64;Converter(
 *     name = "CustomStringConverter",
 *     priority = ConversionPriority.HIGH,
 *     description = "自定义字符串转换器",
 *     enabled = true
 * )
 * public class CustomStringConverter extends AbstractTypeConverter {
 *     // 实现转换逻辑
 * }
 * }</pre>
 *
 * @author cybzacg.blog
 * @version 3.0
 * @since 3.0
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Converter {

    /**
     * 转换器名称
     * 如果不指定，则使用类名的简单名称
     *
     * @return 转换器名称
     */
    String name() default "";

    /**
     * 转换器优先级
     * 数值越小优先级越高
     *
     * @return 优先级
     */
    ConversionPriority priority() default ConversionPriority.MEDIUM;

    /**
     * 转换器描述
     *
     * @return 描述信息
     */
    String description() default "";

    /**
     * 是否启用转换器
     *
     * @return 是否启用
     */
    boolean enabled() default true;

    /**
     * 转换器版本
     *
     * @return 版本号
     */
    String version() default "1.0";

    /**
     * 转换器作者
     *
     * @return 作者信息
     */
    String author() default "";

    /**
     * 支持的目标类型
     * 如果指定了多个类型，转换器需要支持所有类型的转换
     *
     * @return 支持的类型数组
     */
    Class<?>[] supportedTypes() default {};

    /**
     * 转换器标签
     * 用于分类和搜索转换器
     *
     * @return 标签数组
     */
    String[] tags() default {};
}
